home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / ms_dos / if2 / if2.c next >
C/C++ Source or Header  |  1993-11-30  |  4KB  |  166 lines

  1. /* まだまだ動かないけど、ディレクトリ移動は未サポートだけど、形にはなったバージョン(でもこういう形には10月からなっていたんだ。ぐすん。SYSTEM関数がうまく動かないんだよ~。98ではきちんとコンパイル出来るのに)V.0.1 92/12/30 wed */
  2.  
  3. /* ひゃっほ~!動いたよ~ん。やったー!!!すげぇ~。 V.1.00 93/1/10 SUN */
  4. /* ちょっとした手直し・・・・                            V.1.02 93/2/04 TUE */
  5. /* すこしのバグみたいな(^^;テナオシ                        V.1.02a 93/7/23 FRI*/
  6. /* lcon に対応(^^;                                     V.1.03 93/7/28 WEN */
  7.  
  8. /* 書式: 
  9.          IF2 [-l] [TMENU.IF2 のあるドライブ]  ファイル名.拡張子 
  10. */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. void if2_check(char f_name[], char drv[]);
  17. void if2_exec(char if2_file[], char f_name[]);
  18.  
  19. int l = 0;
  20.  
  21. void main( int argc, char *argv[] )
  22. {
  23.     char f_name[32],drv[128];
  24.     
  25.     if ( !( argc == 2 || argc == 3 || argc == 4))
  26.     {
  27.         printf ("Usage : IF2 [op.] data_file_name.???\n");
  28.         exit(1); /* 異常終了 */
  29.     }
  30.     
  31.     else if ( argc == 4)
  32.     {
  33.         strcpy(drv,argv[2]);
  34.         l = 1;
  35.         sscanf(argv[3],"%32s",f_name); /* argv[3] からファイル名を取得 */
  36.     
  37.     }
  38.     
  39.     else if ( argc == 3)
  40.     {
  41.         if ( 0 == stricmp("-l",argv[1]) ) /* オプション -l があるか */
  42.         {
  43.             l = 1;
  44.             strcpy(drv,"D:");
  45.         }
  46.         else
  47.             strcpy(drv,argv[1]);
  48.     
  49.         sscanf(argv[2],"%32s",f_name); /* argv[2] からファイル名を取得 */
  50.     
  51.     }
  52.     else if ( argc == 2)
  53.     {
  54.         strcpy(drv,"D:");
  55.         sscanf(argv[1],"%32s",f_name); /* argv[1] からファイル名を取得 */
  56.         
  57.     }
  58.     
  59.     
  60.     if2_check(f_name,drv); /* 実際の実行関数へと移動 */
  61.  
  62.     puts("ふつーにおわったお(⌒.⌒)v");
  63.  
  64. }
  65.  
  66. void if2_check(char f_name[], char drv[])
  67. {
  68.     int n;
  69.     char if2_file[128];
  70.     FILE *tmpstr;
  71.     char ex_1[4],ex_2[4];  /* 拡張子用の配列 */
  72.     for( n =0; n <= 31; n++) /* 入力ファイルの拡張子の取得 */
  73.     {
  74.         if (f_name[n] == '.')
  75.         {
  76.             sscanf(f_name+n+1,"%3s",ex_1);
  77.             break;
  78.         }
  79.     }
  80.     
  81.     strcat(drv,"\\TMENU.IF2");
  82.     
  83.     if ((tmpstr = fopen(drv,"r")) == NULL)
  84.     {
  85.         printf("ファイルが開けへんかったわ。ごめんねぇ(^^;\n");
  86.         if ( l == 1) system("lcon I");
  87.         exit(1);
  88.     }
  89.     
  90.     for (; fgets(if2_file,128,tmpstr);)
  91.     {
  92.         sscanf(if2_file,"%3s",ex_2); /* .IF2からの拡張子の取得 */
  93.         if ( 0 == stricmp(ex_1,ex_2)) /*拡張子の比較 大文字小文字の区別なし*/
  94.         {
  95.             fclose(tmpstr);
  96.             if2_exec(if2_file,f_name);
  97.             break;
  98.         }
  99.         else 
  100.             continue;
  101.     }
  102. }
  103.  
  104. void if2_exec(char if2_file[], char f_name[])
  105. {
  106.     int i = 0,f,n;
  107.     char buff[128],tmp[128] = "RUN386.EXE ";
  108.     char con[32];
  109.     
  110.     for ( i=10, f=0; '\n' != if2_file[i]; i++, f++) 
  111.             buff[f] = if2_file[i];
  112.     
  113.     buff[f] = ' '; /* ファイル名の連結がうまくいくおまじない。 */
  114.     buff[f+1] = '\0'; /* ナル文字の追加。 f+n+1 が buff の最後*/
  115.     
  116.     strcat(buff,f_name); /*ファイル名の付加*/
  117.     
  118.     if ( l == 1)    printf("if2 V1.03 lcon対応 :\n");
  119.     else    printf("if2 V1.03 : \n");
  120.     
  121.     if ( if2_file[5] == '0') /* EXE,COM,BAT のチエック */
  122.     {
  123.         printf("%s\n",strcat(tmp,buff)); /* RUN386 をつける。 */
  124.  
  125.         if ( l == 1) system("lcon S"); /* 情けね~(^_^; */
  126.         system(tmp); /* 起動するはず・・・ */
  127.         if ( l == 1) system("lcon I");
  128.         
  129.     }
  130.     
  131.     else if( if2_file[5] == '1') /* こちらがリアルモード用の処理 */
  132.     {
  133.  
  134.         for ( i = 0; buff[i] != ' '; i++)
  135.         {
  136.             con[i] = buff[i]; /* console.exe が有るかどうかの処理のため */
  137.         }
  138.         /* CONSOLE.EXE や ORICON.EXE を抜く */
  139.         if ( 0 == stricmp("d:\\console.exe",con))
  140.         {
  141.             for ( i = 10;; i++) 
  142.             {
  143.                 if ( buff[i] == ' ' && buff[i+2] == ':')
  144.                 {
  145.                     for( n = i+1, f = 0; buff[n] != '\0'; n++, f++)
  146.                         tmp[f] = buff[n];
  147.                     tmp[f] = '\0';
  148.                     break;
  149.                 }
  150.             }
  151.         }
  152.         
  153.         else /* console.exe が無かったときの処理 */
  154.         {
  155.             for( f = 0; buff[f] != '\0'; f++)
  156.                 tmp[f] = buff[f];
  157.             tmp[f] = '\0';
  158.         }
  159.         
  160.         if ( l == 1) system("lcon S");
  161.         system(tmp);
  162.         if ( l == 1) system("lcon I");
  163.     }
  164. }
  165.  
  166.